// 公共属性
global.__basename = __dirname;
const WebSocket = require("ws");
const http = require('http');
const express = require("express");
const path = require("path");
let userRoutes = require(path.resolve(__basename, "router/index.js"));


let app = express();
// // 创建一个 WebSocket 服务器实例，监听在自定义路径上
const wss = new WebSocket.Server({ port: 80, path: "/custom/path" });
let index = 1;
wss.on("connection", (ws) => {
  console.log("New client connected on custom path");

  // 处理收到的消息
  ws.on("message", (message) => {
    console.log(`Received message: ${message}`);
    // 发送消息给客户端
    // ws.send(`Server received: ${message}`);

    let timer = setInterval(() => {
      ws.send(`Server received: ${message}`);
      ws.send(`${index}`);
      index++;
      if (index >= 10) {
        index = 0;
        clearInterval(timer);
      }
    }, 1000);
  });

  // 处理连接关闭
  ws.on("close", () => {
    console.log("Client disconnected");
  });

  // 处理连接错误
  ws.on("error", (error) => {
    console.error(`WebSocket error: ${error}`);
  });
});

// 中间件，用于解析 JSON 请求体
app.use(express.json());
app.all("*", (req, res, next) => {
  //允许跨域地址
  // res.header("Access-Control-Allow-Origin", "http://127.0.0.1:9000");

  //*表示允许所有域请求，此时无法实现跨域携带cookie, 在实际开发中，一般指定允许某个域请求，如上面设置
  res.header("Access-Control-Allow-Origin", "*");

  //动态允许跨域地址, 实现效果和 * 一样,  但可以实现跨域携带cookie
  // res.header("Access-Control-Allow-Origin", req.headers.origin);

  //如果浏览器请求包括Access-Control-Request-Headers字段，则Access-Control-Allow-Headers字段是必需的。它也是一个逗号分隔的字符串，表明服务器支持的所有头信息字段，不限于浏览器在"预检"中请求的字段。
  res.header(
    "Access-Control-Allow-Headers",
    "X-Requested-With, content-type,token"
  );

  //该字段必需，它的值是逗号分隔的一个字符串，表明服务器支持的所有跨域请求的方法。注意，返回的是所有支持的方法，而不单是浏览器请求的那个方法。这是为了避免多次"预检"请求。
  res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");

  //该字段可选。它的值是一个布尔值，表示是否允许发送Cookie。默认情况下，Cookie不包括在CORS请求之中。设为true，即表示服务器明确许可，Cookie可以包含在请求中，一起发给服务器。这个值也只能设为true，如果服务器不要浏览器发送Cookie，删除该字段即可
  // res.header('Access-Control-Allow-Credentials', true);

  next();
});
console.log("WebSocket server is listening on ws://localhost/custom/path");

//加载路由
app.use(userRoutes)
// 启动服务器
app.listen(8080, () => {
  console.log(`Server is running on http://localhost:${80}`);
});
